টাস্ক প্যারালাল লাইব্রেরি (TPL)

থ্রেডিং এবং কনকারেন্সি - সি শার্প (C#) - Computer Programming

333

টাস্ক প্যারালাল লাইব্রেরি (Task Parallel Library বা TPL) সি# এ একটি শক্তিশালী কনকারেন্সি লাইব্রেরি, যা সমান্তরাল প্রোগ্রামিং (Parallel Programming) সহজ করে। এটি .NET ফ্রেমওয়ার্কের System.Threading.Tasks নেমস্পেসের অংশ এবং টাস্ক-ভিত্তিক কাজগুলো সমান্তরালে চালানোর জন্য ডিজাইন করা হয়েছে। TPL এর মাধ্যমে প্যারালাল প্রোগ্রামিংয়ের জটিলতা কমানো যায় এবং প্রোগ্রামের কার্যক্ষমতা বৃদ্ধি করা যায়।

TPL এর বৈশিষ্ট্য

  • সহজ টাস্ক ব্যবস্থাপনা: TPL ব্যবহার করে টাস্ক তৈরি, পরিচালনা এবং ট্র্যাক করা সহজ।
  • সহজ কনকারেন্সি নিয়ন্ত্রণ: একাধিক কাজকে সমান্তরালে চালানোর সুবিধা।
  • Error Handling: TPL সহজে এক্সেপশন হ্যান্ডলিং এবং টাস্ক ক্যাঙ্কেল করার জন্য ব্যবস্থা সরবরাহ করে।

TPL এর গুরুত্বপূর্ণ কিছু ক্লাস ও মেথড

  • Task: টাস্ক তৈরি ও পরিচালনা করতে ব্যবহৃত।
  • Task.Run: একটি টাস্ক শুরু করে।
  • Task.WhenAll এবং Task.WhenAny: একাধিক টাস্ককে একত্রে পরিচালনা করতে ব্যবহৃত।
  • Parallel.For এবং Parallel.ForEach: লুপকে সমান্তরালে চালানোর জন্য ব্যবহৃত।

টাস্ক তৈরি ও ব্যবহার

Task ক্লাস দিয়ে টাস্ক তৈরি করা হয় এবং Start() মেথড বা Task.Run দিয়ে টাস্ক চালানো যায়।

উদাহরণ: Task ক্লাস ব্যবহার করে টাস্ক তৈরি

using System;
using System.Threading.Tasks;

public class Program
{
    public static void Main()
    {
        Task task = new Task(() =>
        {
            for (int i = 1; i <= 5; i++)
            {
                Console.WriteLine("Task running: " + i);
            }
        });

        task.Start();
        task.Wait(); // টাস্ক শেষ হওয়ার জন্য অপেক্ষা

        Console.WriteLine("Task completed.");
    }
}

Task.Run() ব্যবহার করে টাস্ক চালানো

Task.Run একটি নতুন টাস্ক তৈরি এবং চালানোর সহজ পদ্ধতি।

using System;
using System.Threading.Tasks;

public class Program
{
    public static async Task Main()
    {
        Task task = Task.Run(() =>
        {
            for (int i = 1; i <= 5; i++)
            {
                Console.WriteLine("Running task: " + i);
            }
        });

        await task; // টাস্ক শেষ হওয়া পর্যন্ত অপেক্ষা

        Console.WriteLine("Task is complete.");
    }
}

একাধিক টাস্ক পরিচালনা (Task.WhenAll এবং Task.WhenAny)

Task.WhenAll এবং Task.WhenAny মেথডগুলো একাধিক টাস্ক চালানো এবং একসাথে পরিচালনা করতে ব্যবহৃত হয়।

উদাহরণ: Task.WhenAll দিয়ে একাধিক টাস্ক একসাথে চালানো

using System;
using System.Threading.Tasks;

public class Program
{
    public static async Task Main()
    {
        Task task1 = Task.Run(() => Console.WriteLine("Task 1"));
        Task task2 = Task.Run(() => Console.WriteLine("Task 2"));
        Task task3 = Task.Run(() => Console.WriteLine("Task 3"));

        await Task.WhenAll(task1, task2, task3); // সব টাস্ক শেষ হওয়া পর্যন্ত অপেক্ষা

        Console.WriteLine("All tasks completed.");
    }
}

Task.WhenAny দিয়ে একটিমাত্র টাস্ক শেষ হওয়া পর্যন্ত অপেক্ষা

using System;
using System.Threading.Tasks;

public class Program
{
    public static async Task Main()
    {
        Task task1 = Task.Delay(2000); // ২ সেকেন্ড অপেক্ষা
        Task task2 = Task.Delay(1000); // ১ সেকেন্ড অপেক্ষা

        await Task.WhenAny(task1, task2); // যেকোনো একটি টাস্ক শেষ হলে পরবর্তী কোড চালাবে

        Console.WriteLine("One of the tasks completed.");
    }
}

Parallel ক্লাসের ব্যবহার

Parallel.For এবং Parallel.ForEach সমান্তরালে লুপ চালানোর জন্য ব্যবহৃত হয়।

উদাহরণ: Parallel.For

using System;
using System.Threading.Tasks;

public class Program
{
    public static void Main()
    {
        Parallel.For(1, 6, i =>
        {
            Console.WriteLine("Parallel Task: " + i);
        });

        Console.WriteLine("Parallel.For loop completed.");
    }
}

উদাহরণ: Parallel.ForEach

using System;
using System.Collections.Generic;
using System.Threading.Tasks;

public class Program
{
    public static void Main()
    {
        List<string> names = new List<string> { "Alice", "Bob", "Charlie" };

        Parallel.ForEach(names, name =>
        {
            Console.WriteLine("Processing: " + name);
        });

        Console.WriteLine("Parallel.ForEach loop completed.");
    }
}

TPL এর মাধ্যমে টাস্ক ক্যান্সেল করা (Task Cancellation)

কখনো কখনো নির্দিষ্ট শর্তে টাস্ক বন্ধ করা প্রয়োজন হতে পারে। TPL এ CancellationToken এর মাধ্যমে টাস্ক ক্যান্সেল করা যায়।

using System;
using System.Threading;
using System.Threading.Tasks;

public class Program
{
    public static async Task Main()
    {
        CancellationTokenSource cts = new CancellationTokenSource();
        CancellationToken token = cts.Token;

        Task task = Task.Run(() =>
        {
            for (int i = 1; i <= 5; i++)
            {
                if (token.IsCancellationRequested)
                {
                    Console.WriteLine("Task canceled.");
                    return;
                }

                Console.WriteLine("Task running: " + i);
                Thread.Sleep(1000);
            }
        }, token);

        await Task.Delay(2000); // কিছু সময় অপেক্ষা
        cts.Cancel(); // টাস্ক ক্যান্সেল

        await task;
        Console.WriteLine("Main task completed.");
    }
}

সংক্ষেপে

  • Task: একটি নির্দিষ্ট কাজ চালায় এবং কনকারেন্টলি কাজ সম্পন্ন করে।
  • Task.Run(): নতুন টাস্ক তৈরি এবং চালানো সহজ করে।
  • Task.WhenAll এবং Task.WhenAny: একাধিক টাস্ককে একত্রে বা আলাদাভাবে পরিচালনা করা যায়।
  • Parallel.For এবং Parallel.ForEach: লুপ চালানো সমান্তরালে।
  • CancellationToken: টাস্ক ক্যান্সেল করতে ব্যবহৃত হয়।

Task Parallel Library সি# এ কনকারেন্সি এবং প্যারালালিজমকে সহজ এবং কার্যকর করে তোলে। এটি ব্যবহার করে কার্যক্ষমতা বৃদ্ধি, সমান্তরালে কাজ পরিচালনা, এবং আরও দ্রুত সাড়া প্রদান করা সম্ভব হয়।

Content added By
Promotion

Are you sure to start over?

Loading...